После завершения этого раздела вы сможете войти в систему и изменить пароль root, если текущий пароль root был потерян.
root
Одна из задач, которую должен уметь выполнять любой системный администратор, — сброс пароля root. Если администратор находится в системе как непривилегированный пользователь, но с полным доступом sudo, или как пользователь root, задача упрощается. Если администратор не в системе, ситуация немного сложнее.
Есть несколько способов задать новый пароль root. Например, системный администратор может загрузить систему, используя Live CD, смонтировать оттуда корневую файловую систему и отредактировать /etc/shadow. В этом разделе мы рассмотрим метод, который не требует применения внешних средств.
/etc/shadow
В Red Hat Enterprise Linux 6 и более ранних версиях администраторы могут загрузить систему на уровне запуска 1, чтобы получить командную строку root. Ближайшим аналогом уровня запуска 1 на машине с Red Hat Enterprise Linux 8 являются цели rescue и emergency. Обеим требуется пароль root для входа в систему.
В Red Hat Enterprise Linux 8 можно сделать так, чтобы сценарии, которые запускаются из initramfs, приостанавливались в определенный момент, открывали сеанс командной оболочки с правами пользователя root, а после закрытия командной оболочки продолжали работу. В основном этот метод предназначен для отладки, но его можно использовать и для сброса пароля root.
initramfs
Для доступа к командной оболочке root выполните следующие действия.
Перезагрузите систему.
Прервите обратный отсчет загрузчика, нажав любую клавишу, кроме Enter.
Установите курсор на запись ядра, которое требуется загрузить.
Нажмите e, чтобы отредактировать выбранную запись.
Установите курсор на командную строку ядра (строку, которая начинается с linux).
linux
Добавьте rd.break. С этой опцией система приостанавливает работу перед передачей управления от initramfs фактической системе.
rd.break
Нажмите Ctrl+x, чтобы начать загрузку с учетом изменений.
В этот момент система открывает командную оболочку root, а фактическая корневая файловая система монтируется в режиме «только чтение» в /sysroot. Поскольку для устранения проблем часто требуется изменение корневой файловой системы, необходимо перевести ее в режим «чтение/запись». Далее показано, как опция remount,rw команды mount повторно монтирует файловую систему с новой опцией (rw).
/sysroot
remount,rw
rw
Готовые образы могут помещать несколько аргументов console= в ядро для поддержки различных сценариев реализации. Эти аргументы console= указывают устройства, которые будут использоваться для вывода на консоль. При использовании rd.break следует иметь в виду, что, хотя система отправляет сообщения ядра на все консоли, приглашение командной строки появится на консоли, указанной последней. Если приглашение не появляется, вы можете временно изменить порядок аргументов console= при редактировании командной строки ядра из загрузчика.
console=
Система еще не включила SELinux, создаваемые вами файлы не имеют контекста SELinux. Некоторые утилиты (например, команда passwd) сначала создают временный файл, а затем заменяют им файл, который необходимо отредактировать, создавая новый файл без контекста SELinux. Поэтому, когда вы используете команду passwd с опцией rd.break, файл /etc/shadow не получает контекст SELinux.
С этого момента для сброса пароля root необходимо выполнить следующие шаги.
Перемонтируйте /sysroot в режиме «чтение/запись».
switch_root:/# mount -o remount,rw /sysroot
switch_root:/#
Переключитесь на chroot jail, где /sysroot используется как корень дерева файловой системы.
switch_root:/# chroot /sysroot
Задайте новый пароль root.
sh-4.4# passwd root
sh-4.4#
Убедитесь, что все файлы без меток (в том числе /etc/shadow) получают метки во время загрузки.
sh-4.4# touch /.autorelabel
Дважды введите exit. Первая команда позволит выйти из chroot jail, а вторая — из оболочки отладки initramfs.
В этот момент система продолжит загрузку, выполнит переустановку меток SELinux, а затем снова перезагрузится.
Log-файлы с записями предыдущих неудачных загрузок могут оказаться очень полезны. Если системные журналы сохраняются при перезагрузке, вы можете использовать утилиту journalctl для просмотра log-файлов.
Помните, что по умолчанию системные журналы хранятся в каталоге /run/log/journal, а это означает, что они очищаются при перезагрузке системы. Для сохранения журналов в каталоге /var/log/journal, который не очищается при перезагрузке, задайте для параметра Storage значение persistent в файле /etc/systemd/journald.conf.
/run/log/journal
/var/log/journal
Storage
persistent
/etc/systemd/journald.conf
[root@host ~]# vim /etc/systemd/journald.conf ...output omitted... [Journal] Storage=persistent ...output omitted... [root@host ~]# systemctl restart systemd-journald.service
[root@host ~]#
vim /etc/systemd/journald.conf
systemctl restart systemd-journald.service
Для просмотра log-файлов предыдущей загрузки используйте команду journalctl с опцией -b. Опция -b без аргументов отображает только сообщения с момента последней загрузки. Если в качестве аргумента указано отрицательное число, отображаются сообщения предыдущих загрузок.
-b
[root@host ~]# journalctl -b -1 -p err
journalctl -b -1 -p err
Эта команда отображает все сообщения, относящиеся к ошибкам или более серьезным проблемам в предыдущей загрузке.
Для устранения проблем с запуском служб во время загрузки в Red Hat Enterprise Linux 8 можно использовать следующие методы.
Включение командной оболочки для отладки на раннем этапе
Если включить службу debug-shell с помощью команды systemctl enable debug-shell.service, система создает командную оболочку root на TTY9 (Ctrl+Alt+F9) на раннем этапе загрузки. Эта оболочка автоматически регистрируется в системе как root, поэтому администратор может выполнять отладку, пока операционная система загружается.
debug-shell
TTY9
Не забудьте отключить службу debug-shell.service по окончании отладки, иначе неаутентифицированная оболочка root останется открытой любому пользователю с локальным доступом к консоли.
debug-shell.service
Использование целей emergency и rescue
Если добавить systemd.unit=rescue.target или systemd.unit=emergency.target в командную строку ядра из загрузчика, система создаст восстановительную (rescue) или аварийную (emergency) оболочку вместо запуска в обычном режиме. Для обеих упомянутых оболочек требуется пароль root.
systemd.unit=rescue.target
systemd.unit=emergency.target
Цель emergency оставляет корневую файловую систему смонтированной в режиме «только чтение», а цель rescue ожидает, пока завершит работу sysinit.target, чтобы успели запуститься другие процессы системы, например служба журналов или файловые системы. Пользователь root не может вносить изменения в /etc/fstab, пока диск не будет перемонтирован с доступом на чтение и запись с помощью команды mount -o remount,rw /.
sysinit.target
mount -o remount,rw /
Администраторы могут использовать эти оболочки для устранения проблем, мешающих нормальной загрузке системы, например цикла зависимости между службами или неправильной записи в файле /etc/fstab. После выхода из этих оболочек будет продолжен стандартный процесс загрузки.
/etc/fstab
Идентификация зависших заданий
Во время запуска демон systemd порождает ряд заданий. Если какие-то задания не завершатся, это помешает выполнению других заданий. Администратор может использовать команду systemctl list-jobs для просмотра списка текущих заданий. Все задания, помеченные как running, должны быть выполнены, чтобы могло начаться выполнение заданий, помеченных как waiting.
systemd
Man-страницы dracut.cmdline(7), systemd-journald(8), journald.conf(5), journalctl(1) и systemctl(1)